import CryptoJS from 'crypto-js'
import store from "../store/store.js"
import config from '@/config'
import axios from 'axios';
import { notification } from 'ant-design-vue';
import { logout } from '@/modules/common/service/base.js';
const UP_URL = config.upUrl;
// 加密Key
const key = CryptoJS.enc.Utf8.parse("@http://www.dquick.com#!"); //十六位十六进制数作为密钥
/**
 * 加密
 * @param {String} str 
 */
export function desEncrypt(str) {
    var encode_str = CryptoJS.TripleDES.encrypt(str, key, {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    });
    return encode_str.toString();
}

/**
 * 解密
 * @param {String} str 
 */
export function desDecrypt(str) {
    var decrypt_str = CryptoJS.TripleDES.decrypt(str, key, {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    });
    return decrypt_str.toString(CryptoJS.enc.Utf8);
}

/**
 * 获取请求头
 */
export function getHttpHeaders(headers) {
    if (store.state.token) {
        headers['Authorization'] = 'Bearer ' + store.state.token;
    }
    return Object.assign({
        'Content-Type': "application/json;charset=utf-8",
        // ts: new Date().getTime(),
        // cv: WEBAPP_VERSION,
        // // 客服端类型（1-安卓 2-IOS ）
        // ct: getCT(),
        // // 平台类型（）
        // pt: 6,
        // // 请求来源（1-原生 2-浏览器 3-微信小程序）
        // rs: 2
    }, headers || {});

    function getCT() {
        var u = navigator.userAgent;
        var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1; //android终端
        var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
        let ct = 99;
        // 1-安卓 2-IOS 99-其他
        if (isAndroid) {
            ct = 1;
        } else if (isiOS) {
            ct = 2;
        }
        return ct;
    }
}

const instance = axios.create({
    timeout: 20000,
    // baseURL: '/apis',
    headers: {
        'Content-Type': "application/json;charset=utf-8"
    },
    // withCredentials:false
});

// 添加请求拦截器
instance.interceptors.request.use(config => {
    config.headers = getHttpHeaders(config.headers);
    // 请求参数加密上传图片除外
    if (config.url != UP_URL + '/media/upload' && config.url != UP_URL + '/media/defaultUpload' && config.url.indexOf('/file/upload/auth') < 0) {
        store.state.loadding = true; //在请求发出之前进行一些操作
        if (config.method == 'post') {
            config.data = config.data
        }
        if (config.method == 'get' || config.method == 'delete') {
            config.params = config.params || config.data
        }
    }

    //处理加载信息
    return config;
},
    err => {
        return Promise.reject(err);
    }
);

// 异常拦截处理器
const errorHandler = (error) => {
    store.state.loadding = false; //在请求发出之前进行一些操作
    console.log('err' + error)
    let { message } = error
    if (!message) {
        return Promise.reject(error);
    }
    if (message === 'Network Error') {
        message = '网络连接异常'
    } else if (message.includes('timeout')) {
        message = '系统接口请求超时'
        return Promise.reject('break')
    } else if (message.includes('Request failed with status code')) {
        message = '系统接口' + message.substr(message.length - 3) + '异常'
    }
    notification.error({
        message: message,
        duration: 3 * 1000
    })
    return Promise.reject(error)
}

// 添加响应拦截器
instance.interceptors.response.use(res => {
    if(res.data&&res.data.msg)res.data.message = res.data.msg;
    if (res.data.code == 200) {
        store.state.loadding = false; //在请求发出之前进行一些操作
        return res;
    }
   console.log(window.location.href);
    if (res.data.code == 401) { //未登陆
        // window.location.href.indexOf('/login') < 0
        logout(null, true).then((result) => { });
    }
    
    // 对响应数据做点什么
    store.state.loadding = false; //在请求发出之前进行一些操作
    return res;
}, errorHandler);

export function getAxiosInstance() {
    return instance;
}